package com.tedu.api.thread;

import org.junit.Test;

/**
 * 3.了解线程常用方法，结合Lambda
 * setPriority()    基本线程API   设置线程优先级
 * 使用方法：setPriority(1~10)  数值越大，线程执行优先级别越高
 * setPriority(Thread.MAX_PRIORITY)
 * Thread线程类--提供常量：表示优先级：最大跟最小
 * getPriority()   常用线程API    获取线程优先级：  1~10  默认5
 * <p>
 * 需求：创建三个线程-->lambda--->Thread线程
 * 每个线程中实现for循环：1000次
 * 1.老大一声吼，地球也得抖三抖    max
 * 2.老二一出手，蚊子全飞走       normal
 * 3.老三一张口，笑倒一头牛       min
 * 总结：线程优先级决定：优先级数值越大，几率越高，而不是最终结果
 * 结论：三个线程，同时执行1000次输出语句【同时：并发】
 * 线程原则上可以指定优先级，不能主动获取CPU时间片
 * 能决定时间片的长度，只能被动分配，指定优先级只是最大程度上改变CP8U时间片获取的几率！
 * 理论上：线程优先级越高CPU时间片获取次数越高！
 *
 */
public class Thread_Priority {
    public static void main(String[] args) {
        Thread max = new Thread(() -> {
            for (int i = 1; i < 1000; i++) {
                System.out.println("老大一声吼，地球也得抖三抖");
            }
        });
        max.setPriority(Thread.MAX_PRIORITY);
        max.start();

        Thread normal = new Thread(() -> {
            for (int i = 1; i < 1000; i++) {
                System.out.println("老二一出手，蚊子全飞走");
            }
        });
        normal.setPriority(Thread.NORM_PRIORITY);
        normal.start();

        Thread min = new Thread(() -> {
            for (int i = 1; i < 1000; i++) {
                System.out.println("老三一张口，笑倒一头牛");
            }
        });
        min.setPriority(Thread.MIN_PRIORITY);
        min.start();
    }

}
